package com.wr.add05;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;

// 计数器  加法计数器
// 例子：集齐7颗龙珠召唤神龙
public class CyclicBarrierDemo {
    public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
        // CyclicBarrier 有两个构造方法
        // 一个是只计数，一个计数完执行一条线程
//        CyclicBarrier cyclicBarrier = new CyclicBarrier(7);
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
            System.out.println("召唤神龙！");
        });  // 设置目标值

        for (int i = 1; i <= 7; i++) {
            final int temp = i;
            new Thread(()->{
                System.out.println("集齐第"+temp+"颗龙珠");
                try {
                    if (temp == 7){
                        TimeUnit.SECONDS.sleep(6);
                    }
                    cyclicBarrier.await(); // 所有线程达到这个点才会继续下面的
                    System.out.println("线程"+temp+"等待结束");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }

    }
}
